レガシーソフトウェアを再現性高く置き換える手法 〜「射撃しつつ前進」を支える技術〜
https://nota.gyazo.com/9a3a06a6718f33a82417a073f2264f42
発表資料
https://speakerdeck.com/yokotaso/regasisohutoueawozai-xian-xing-gao-kuzhi-kihuan-erushou-fa-she-ji-situtuqian-jin-wozhi-eruji-shu
動画
(公開予定)
以下は、当日のリアルタイム書き込み
レガシーソフトウェアの定義
動き続けてもらわないと困るソフトウェア
わかりやすいtsuno.icon
できれば触りたくないはほんとそうmasaharu.icon
「blogにまとめておくと転職する時に有益」
オープンな場所にあるので、
いい話だな〜tsuno.iconmasaharu.icon
https://nota.gyazo.com/7b626baeda0d1e14a1ff082bb607a2e5
メンタルmasaharu.icon
メンタル管理だいじtsuno.icon
体が頑丈に見える、ずるいwyanagi.icon
鉄板すぎるtsuno.icon
射撃しつつ前進 (Fire And Motion)
https://www.joelonsoftware.com/2002/01/06/fire-and-motion/
https://nota.gyazo.com/5535124d79186945abfbb12022fe4fec
4つのマントラ
Hyrumの法則
ハイラムおじさんいい笑顔だtsuno.icon
Googleのソフトウェアエンジニアリングで出てくる
これの納得感が強すぎて今でも印象に残っている daiiz.icon
ISO-8061
ライブラリの挙動が仕様になる!
https://www.joda.org/joda-time/
「仕様外なので異常な入力はエラー扱いでよい」は悪魔の囁き
なにもしてないけど壊れた案件の原因のひとつだよな〜tsuno.icon
仕様化テスト
レガシーコード改善ガイドに書いてある
記法の仕様化テストありがてぇありがてぇtsuno.icon
何が嬉しいか
旧実装のテストは新実装のテストとして再利用できる
実装を捨てやすい
ダークローンチ
旧サービスの裏で新サービスを動かして結果を捨てる
例
古いライブラリから処理をフック
新しいライブラリに流す
判明した入力を仕様化テストに追加
「野蛮な入力」は草wwwtsuno.icon
信頼性が高まってから、ライブラリを置き換える
これリハーサルで聞いた時、あのときこうすればよかったんだ......みたいな走馬灯が流れたtsuno.icon
ストラングラーフィグパターン
親コンポーネントへの依存を徐々に移行するパターン
例:検索サーバ
検索先はアプリの機能フラグで制御
移行の分け方は、プロダクトカット、テナントカット
レガシーコンポーネントは万が一に備えてしばらく運用
こういうのほんとかしこいと思うtsuno.icon
ストラングラーは聞いたことあったけどストラングラーフィグは知らなかったyanagi.icon
ストラングラーパターン or ダークローンチで移行計画を立案
https://nota.gyazo.com/b9e260ea7e843725cb8e076914282091
yokotasoさんはこれをやっているイメージmasaharu.icon
「なかなか大胆な仕様」は笑えるmasaharu.icon
Hyrumの法則は確定
https://nota.gyazo.com/5ede4073fa63ba17bc83eec6ad7beb44
Nice to haveは全て捨てる
これ大事なんだろうなぁmasaharu.icon
欲望をまず捨てる!qaynam.icon
「俺様がかっこよく一発で全部完璧に動かしたい誘惑」の強さよ......tsuno.icon